      digraph {
  rankdir=BT
  bgcolor=white

  node [shape=plaintext]
  node [fontcolor=black]

  StandAlone     [ style=filled,fillcolor=gray,label=StandAlone ]
	
	  node [fontcolor=lightgray]
	
	  Unconnected    [ label=Unconnected ]
	
	  CommTrouble [ shape=record,
	    label="{communication loss|{Timeout|BrokenPipe|NetworkFailure}}" ]
	
	  node [fontcolor=gray]
	
	  subgraph cluster_try_connect {
	    label="try to connect, handshake"
	    rank=max
	    WFConnection   [ label=WFConnection ]
	    WFReportParams [ label=WFReportParams ]
	  }
	
	  TearDown       [ label=TearDown ]
	
	  Connected      [ label=Connected,style=filled,fillcolor=green,fontcolor=black ]
	
	  node [fontcolor=lightblue]
	
	  StartingSyncS  [ label=StartingSyncS ]
	  StartingSyncT  [ label=StartingSyncT ]
	
	  subgraph cluster_bitmap_exchange {
	    node [fontcolor=red]
	    fontcolor=red
	    label="new application (WRITE?) requests blocked\lwhile bitmap is exchanged"
	
	    WFBitMapT      [ label=WFBitMapT ]
	    WFSyncUUID     [ label=WFSyncUUID ]
	    WFBitMapS      [ label=WFBitMapS ]
	  }
	
	  node [fontcolor=blue]
	
	  cluster_resync [ shape=record,label="{<any>resynchronisation process running\l'concurrent' application requests allowed|{{<T>PausedSyncT\nSyncTarget}|{<S>PausedSyncS\nSyncSource}}}" ]
	
	  node [shape=box,fontcolor=black]
	
	  // drbdadm [label="drbdadm connect"]
	  // handshake [label="drbd_connect()\ndrbd_do_handshake\ndrbd_sync_handshake() etc."]
	  // comm_error [label="communication trouble"]
	
	  //
	  // edges
	  // --------------------------------------
	
	  StandAlone -> Unconnected [ label="drbdadm connect" ]
	  Unconnected -> StandAlone  [ label="drbdadm disconnect\lor serious communication trouble" ]
	  Unconnected -> WFConnection [ label="receiver thread is started" ]
	  WFConnection -> WFReportParams [ headlabel="accept()\land/or                        \lconnect()\l" ]
	
	  WFReportParams -> StandAlone [ label="during handshake\lpeers do not agree\labout something essential" ]
	  WFReportParams -> Connected [ label="data identical\lno sync needed",color=green,fontcolor=green ]
	
	    WFReportParams -> WFBitMapS
	    WFReportParams -> WFBitMapT
	    WFBitMapT -> WFSyncUUID [minlen=0.1,constraint=false]
	
	      WFBitMapS -> cluster_resync:S
	      WFSyncUUID -> cluster_resync:T
	
	  edge [color=green]
	  cluster_resync:any -> Connected [ label="resnyc done",fontcolor=green ]
	
	  edge [color=red]
	  WFReportParams -> CommTrouble
	  Connected -> CommTrouble
	  cluster_resync:any -> CommTrouble
	  edge [color=black]
	  CommTrouble -> Unconnected [label="receiver thread is stopped" ]
	
	}

